package cn.xiaolang.function.network.communicate;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

class UploadServerThread implements Runnable{
    private Socket s=null;
    public UploadServerThread(Socket s) {
		this.s=s;
	}
	
	public void run() {
		 try {
			 String ip=s.getInetAddress().getHostAddress();
			 System.out.println(ip+"连接成功");
			 //把从客户端接收到的数据，存在指定的文件中
			 //创建一个目录，如果目录不存在，就创建一个目录
			 File dir=new File("E:\\test\\fileUpload\\"+ip);
			 if(!dir.exists()){
				 dir.mkdirs();
			 }
			 //创建一个文件，以ip作为标示
			 File file=new File(dir,ip+".txt");
			 int num=2;
			 while(file.exists()){
				 file=new File(dir,ip+"("+num+").txt");
				 num++;
			 }
			
			 //创建一个字符输出流缓冲区对象，把从客户端读取到的文件写入到服务端，指定的路径文件中
			 BufferedWriter bw=new BufferedWriter(new FileWriter(file));
			 //创建一个字符与输入流缓冲区对象，读取从客户端发送过来的数据
			 BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
			 String line=null;
			 while((line=br.readLine())!=null){
				 bw.write(line);//用字符输出流缓冲区对象向服务端的指定路径文件中写入数据
				 bw.newLine();//换行
				 bw.flush();//使用的是字符流，所以需要手动刷新
			 }
			 bw.close();
			/****当文件上传成功，服务端向客户端返回一个消息***/
			 OutputStream out=s.getOutputStream();
			 out.write("文件上传成功！".getBytes());
			 out.close();
			 
			 br.close();
			 s.close();
			 
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

public class UploadServer {

	public static void main(String[] args) throws IOException {
		ServerSocket server=new ServerSocket(10011);
		while(true){
			
			 Socket s=server.accept();
			 UploadServerThread ust=new UploadServerThread(s);
		     new Thread(ust).start();
		}
      
	}

}
